package com.sisgesbyte.services.sistema;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.AccesoLocalRequest;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.seguridad.MantenimientoAccesoLocalesDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.seguridad.AccesoLocalesEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.sistema.bean.AccesoLocalBean;
import com.sisgesbyte.services.sistema.bean.AccesoLocalListaResponse;


@Stateless
public class MantenimientoAccesoLocalImpl implements MantenimientoAccesoLocal {

	@EJB
	private MantenimientoAccesoLocalesDao mantenimientoAccesoLocalesDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public AccesoLocalListaResponse mostrarAccesoLocal(String codTransaccion,FiltrosSQLBean cadenaFiltros) {
		String mensajeTransaccionMetodo = "[mostrarAccesoLocal idTx=" + codTransaccion + "] - ";
		AccesoLocalListaResponse response = new AccesoLocalListaResponse();
		try{
			 response.setIdTransaccion(codTransaccion);
			 List<AccesoLocalesEntity> listaAccesoLocal = null;
			 
			 try{
				 listaAccesoLocal = mantenimientoAccesoLocalesDao.listarAccesoLocales(cadenaFiltros);
			 }catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al mostrar la lista de BD " +e);
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCAL_COD_IDT42);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCAL_MSJ_IDT42);
				return response;
			 }
			 
			 if(listaAccesoLocal.size() > 0){
				 List<AccesoLocalBean> lista = new ArrayList<AccesoLocalBean>();
				 
				 for(AccesoLocalesEntity row :listaAccesoLocal){
					 AccesoLocalBean bean = new AccesoLocalBean();
					 bean.setActive(row.getActive());
					 bean.setCodLocal(validaciones.validarCamposString(row.getCod_local()));
					 bean.setId(row.getId());
					 bean.setIdLocal(row.getIdlocal());
					 bean.setUsuario(validaciones.validarCamposString(row.getUsuario()));
					 bean.setUsuarioId(row.getUsuario_id());
					 lista.add(bean);
				 }
				 response.setListaAccesoLocal(lista);
				 response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				 response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			 }else{
				 response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCAL_COD_IDF41);
				 response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCAL_MSJ_IDF41);
			 }
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCAL_COD_IDT42);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCAL_MSJ_IDT42);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse nuevoAccesoLocal(String codTransaccion, AccesoLocalBean accesoLocal) {
		String mensajeTransaccionMetodo = "[nuevoAccesoLocal idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity daoAccesoLocal = null;
			response.setIdTransaccion(codTransaccion);
			AccesoLocalRequest newAccesoLocal = new  AccesoLocalRequest();
			newAccesoLocal.setActive(accesoLocal.getActive());
			newAccesoLocal.setCodLocal(accesoLocal.getIdLocal());
			newAccesoLocal.setCodUsuario(accesoLocal.getUsuarioId());
			
			try{
				daoAccesoLocal =  mantenimientoAccesoLocalesDao.guardarAccesoLocal(newAccesoLocal);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar el nuevoAccesoLocal en BD " +e);
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCAL_COD_IDT43);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCAL_MSJ_IDT43);
				return response;
			}
			
			if(daoAccesoLocal.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCAL_COD_IDF42);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCAL_MSJ_IDF42);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCAL_COD_IDT43);
			response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCAL_MSJ_IDT43);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse editAccesoLocal(String codTransaccion, AccesoLocalBean accesoLocal) {
		String mensajeTransaccionMetodo = "[editAccesoLocal idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity daoAccesoLocal = null;
			response.setIdTransaccion(codTransaccion);
			AccesoLocalRequest editAccesoLocal = new  AccesoLocalRequest();
			editAccesoLocal.setId(accesoLocal.getId());
			editAccesoLocal.setActive(accesoLocal.getActive());
			editAccesoLocal.setCodLocal(accesoLocal.getIdLocal());
			editAccesoLocal.setCodUsuario(accesoLocal.getUsuarioId());
			
			try{
				daoAccesoLocal =  mantenimientoAccesoLocalesDao.actualizarAccesoLocal(editAccesoLocal);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al actualizar el nuevoAccesoLocal en BD " +e);
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOLOCAL_COD_IDT44);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOLOCAL_MSJ_IDT44);
				return response;
			}
			
			if(daoAccesoLocal.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCAL_COD_IDF42);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCAL_MSJ_IDF42);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOLOCAL_COD_IDT44);
			response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOLOCAL_MSJ_IDT44);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse deleteAccesoLocal(String codTransaccion, int codAccesoLocal) {
		String mensajeTransaccionMetodo = "[deleteAccesoLocal idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity daoAccesoLocal = mantenimientoAccesoLocalesDao.eliminarAccesoLocal(codAccesoLocal);
			response.setIdTransaccion(codTransaccion);
			if(daoAccesoLocal.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ACCESOLOCAL_COD_IDF44);
				response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ACCESOLOCAL_MSJ_IDF44);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar el usuario en BD");
			response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ACCESOLOCAL_COD_IDT45);
			response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ACCESOLOCAL_MSJ_IDT45);
			return response;
		}
		
		return response;
	}

}
